/**
 * @file platform.h
 * @brief 平台抽象层接口
 * 
 * 提供 PC 开发和 AURIX 嵌入式平台的统一接口。
 * 通过宏定义切换平台，保证核心算法代码无需修改。
 * 
 * @note 移植到 AURIX 时只需修改 CURRENT_PLATFORM 宏定义
 */
#ifndef PLATFORM_H
#define PLATFORM_H

// 平台标识常量
#define PLATFORM_PC      1    ///< Windows/Linux PC 开发平台
#define PLATFORM_AURIX   2    ///< AURIX 嵌入式平台

// 当前平台配置（开发时设为 PC，移植时改为 AURIX）
#define CURRENT_PLATFORM PLATFORM_PC

// 图像缩放核心配置 !!!更改此参数其实无效，resize.cpp里还得改!!!
#define SCALE_FACTOR     2     ///< 单边缩小系数（2表示长宽各缩小至1/2）

// 基础图像尺寸  
#define IMAGE_WIDTH      640   ///< 输入图像宽度
#define IMAGE_HEIGHT     480   ///< 输入图像高度

// 派生尺寸（基于SCALE_FACTOR）
#define SCALED_WIDTH     (IMAGE_WIDTH/SCALE_FACTOR)   ///< 缩放后宽度 = 320
#define SCALED_HEIGHT    (IMAGE_HEIGHT/SCALE_FACTOR)  ///< 缩放后高度 = 240


// 调试csv输出控制
#define ENABLE_CSV_OUTPUT 1    ///< 是否启用 CSV 输出（调试用）

#if CURRENT_PLATFORM == PLATFORM_PC
    // PC 平台依赖
    #include <iostream>
    
    /**
     * @brief PC 平台日志输出宏
     * @param msg 日志消息（字符串字面量）
     */
    #define LOG(msg) do { \
        std::cout << "[LOG] " << msg << std::endl; \
    } while(0)
    
    /// PC 平台图像输入路径
    #define IMAGE_PATH "assets/input.png"
    
#elif CURRENT_PLATFORM == PLATFORM_AURIX
    // AURIX 平台依赖（预留）
    // #include "IfxPort.h"  // AURIX 标准外设库
    
    /**
     * @brief AURIX 平台串口日志输出
     * @param msg 日志消息（字符串字面量）
     * 
     * @note 需要实现 uart_send_string 函数
     */
    #define LOG(msg) uart_send_string("[LOG] " msg "\r\n")
    
    /// AURIX 平台图像输入源（摄像头缓冲区）
    #define IMAGE_PATH "camera_buffer"
    
#endif // PLATFORM

#endif // PLATFORM_H
